package com.matrix.draft.jvm.jmm;

import lombok.Data;

public class CAS {
    public static void main(String[] args) {
    }


    // 使用cas对变量修改
    public static void change(AtomicVar var, int newValue) {
        while (true) {
            int oldV = var.getValue(); // 准备旧值
            /** 此时这里其他线程修改了AtomicVar的值 **/
            // Compare 如果失败,则继续循环
            if (oldV != var.getValue()) {
                continue;
            }
            // Compare成功,则可以修改
            var.setValue(newValue);
            break;
        }
    }

    @Data
    class AtomicVar {
        private long version = 1;
        private volatile int value;
    }
}
